package com.sc.nft.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sc.nft.entity.ActivityCoupons;
import com.sc.nft.entity.UserInfo;
import com.sc.nft.entity.dto.ActivityBatchIssueCouponsDTO;
import com.sc.nft.entity.dto.ActivityCouponsDTO;
import com.sc.nft.entity.dto.ActivityCouponsDetailDTO;
import com.sc.nft.entity.dto.ActivityCouponsProductDTO;
import com.sc.nft.entity.vo.ActivityCouponsBatchIssueVO;
import com.sc.nft.entity.vo.ActivityCouponsListVO;
import com.sc.nft.entity.vo.ActivityCouponsProductVO;
import com.sc.nft.entity.vo.EditActivityCouponsVO;
import com.sc.nft.sup.PageResult;

import java.util.List;

/**
 * 优惠券活动服务接口
 *
 * @author liGen
 * @version 1.0
 * @date 2023/12/5 4:35 下午
 */
public interface ActivityCouponsService {

    /**
     * 创建优惠券活动
     *
     * @param vo
     * @return
     */
    void create(EditActivityCouponsVO vo);

    /**
     * 修改优惠券活动
     *
     * @param vo
     * @return
     */
    void update(EditActivityCouponsVO vo);

    /**
     * 优惠券活动上架
     *
     * @param id
     */
    void enable(Long id);

    /**
     * 优惠券活动下架
     *
     * @param id
     */
    void disable(Long id);

    /**
     * 修改优惠券排序
     *
     * @param id
     * @param sort
     */
    void updateSort(Long id, Integer sort);

    /**
     * 优惠券列表
     *
     * @param activityCouponsListVO
     * @return
     */
    Page<ActivityCouponsDTO> getAdminActivityCouponsDTOPage(ActivityCouponsListVO activityCouponsListVO);

    /**
     * 用户端优惠券列表
     *
     * @param pageNo
     * @param pageSize
     * @return
     */
    Page<ActivityCouponsDTO> getMallActivityCouponsDTOPage(Integer pageNo, Integer pageSize, UserInfo userInfo, Long productId);

    /**
     * 会员专区用户端优惠券列表
     *
     * @param pageNo
     * @param pageSize
     * @param userInfo
     * @param memberId
     * @param memberId
     * @return
     */
    Page<ActivityCouponsDTO> getMallMemberActivityCouponsDTOPage(Integer pageNo, Integer pageSize, UserInfo userInfo, Long memberId, Long memberEquityTemplateId);

    /**
     * 获取活动优惠券
     *
     * @param id
     * @return
     */
    ActivityCoupons getById(Long id);

    /**
     * 获取活动优惠券
     *
     * @param id
     * @return
     */
    ActivityCouponsDetailDTO getActivityCouponsDetailDTOById(Long id);

    /**
     * 获取优惠券下的可用商品
     *
     * @param activityCouponsProductVO
     * @return
     */
    Page<ActivityCouponsProductDTO> getActivityCouponsProductDTOPage(ActivityCouponsProductVO activityCouponsProductVO);

    /**
     * 获取优惠券下的可用商品
     *
     * @param activityCouponsProductVO
     * @return
     */
    List<ActivityCouponsProductDTO> getActivityCouponsProductDTOList(ActivityCouponsProductVO activityCouponsProductVO);

    /**
     * 空投优惠券
     *
     * @param activityCouponsBatchIssueVO
     * @return
     */
    void batchIssueCoupons(ActivityCouponsBatchIssueVO activityCouponsBatchIssueVO);

    /**
     * 批量空投优惠券选择优惠券列表
     * @param activityCouponsListVO
     * @return
     */
    Page<ActivityBatchIssueCouponsDTO> batchIssuePage(ActivityCouponsListVO activityCouponsListVO);
}
